package cn.com.yusys.yusp.admin.web.rest;

import cn.com.yusys.yusp.admin.domain.AdminSmFuncMod;
import cn.com.yusys.yusp.admin.service.AdminSmFuncModService;
import cn.com.yusys.yusp.commons.mapper.QueryModel;
import cn.com.yusys.yusp.commons.service.CommonService;
import cn.com.yusys.yusp.commons.web.rest.CommonResource;
import cn.com.yusys.yusp.commons.web.rest.dto.ResultDto;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @项目名称: yusp-admin
 * @类名称: AdminSmFuncModResource
 * @类描述: 模块管理接口层
 * @功能描述:
 * @创建人: weimei1@yusys.com.cn
 * @创建时间: 2017-12-16 18:30
 * @修改备注:
 * @修改记录: 修改时间 修改人员 修改原因
 *        -------------------------------------------------------------
 * @version 1.0.0
 * @Copyright (c) 2018宇信科技-版权所有
 */
@RestController
@RequestMapping("/api/adminsmfuncmod")
public class AdminSmFuncModResource extends CommonResource<AdminSmFuncMod, String> {

	@Autowired
	private AdminSmFuncModService adminSmFuncModService;

	@Override
	protected CommonService getCommonService() {
		return this.adminSmFuncModService;
	}

	/**
	 * @方法名称: getModInfo
	 * @方法描述: 查询模块信息
	 * @参数与返回说明:
	 * @算法描述:
	 */
	@GetMapping("/querymod")
	public ResultDto<List<Map<String, Object>>> getModInfo(QueryModel queryModel) {
		List<Map<String, Object>> list = adminSmFuncModService.getModInfo(queryModel);
		return new ResultDto<List<Map<String, Object>>>(list);
	}

	/**
	 * @方法名称: createMod
	 * @方法描述: 新增模块信息
	 * @参数与返回说明:
	 * @算法描述:
	 */
	@PostMapping("/createmod")
	public ResultDto<Integer> createMod(@RequestBody AdminSmFuncMod adminSmFuncMod) {
		int result = this.adminSmFuncModService.createMod(adminSmFuncMod);
		ResultDto<Integer> resultDto= new ResultDto<>();
		if(result >=1) {
			resultDto.setMessage("新增"+adminSmFuncMod.getModName()+"模块");
		}
		resultDto.setData(result);
		return resultDto;
	}

	/**
	 * @方法名称: editMod
	 * @方法描述: 修改模块信息
	 * @参数与返回说明:
	 * @算法描述:
	 */
	@PostMapping("/editmod")
	public ResultDto<Integer> editMod(@RequestBody AdminSmFuncMod adminSmFuncMod) {
		int result = this.adminSmFuncModService.editMod(adminSmFuncMod);
		ResultDto<Integer> resultDto= new ResultDto<>();
		if(result >= 1 ){
			resultDto.setMessage("模块信息修改成功");
		}
		resultDto.setData(result);
		return resultDto;
	}

    /**
     * @方法名称: deleteMod
     * @方法描述: 删除模块信息
     * @参数与返回说明:
     * @算法描述:
     */
	@SuppressWarnings("rawtypes")
    @PostMapping("/deletemod")
	public ResultDto<Integer> deleteMod(@RequestBody String modId){
		ObjectMapper mapper = new ObjectMapper();
		ResultDto<Integer> resultDto = new ResultDto<>();
		String id = null;
		try {
			Map idMap = mapper.readValue(modId, Map.class);
			id = (String) idMap.get("modId");
		} catch (IOException e) {
			e.printStackTrace();
		}
		int n = adminSmFuncModService.deleteMod(id);
		if(n >= 1){
			resultDto.setMessage("删除modId:"+id+"成功");
		}
		resultDto.setData(n);
		return resultDto;
	}

	/**
	 * @方法名称: checkName
	 * @方法描述: 保存数据前查询模块名称是否已经存在
	 * @参数与返回说明:
	 * @算法描述:
	 */
	@GetMapping("/checkname")
	public ResultDto<List<Map<String,Object>>> checkName(@RequestParam(required = false) String modName,@RequestParam(required = false) String modId){
		List<Map<String,Object>> result = adminSmFuncModService.checkName(modName,modId);
		return new ResultDto<List<Map<String,Object>>>(result);
	}
}
